package es.albarregas.dao;

import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.GregorianCalendar;

import es.albarregas.modelo.Pedido;

public class PedidoDAO extends ConexionDAO {
	
	private static final String INSERT = 
			"insert into pedido (fecha,confirmado,user_oid) values (?,?,?)";
	private static final String UNREGISTRO = 
			"select oid,fecha,confirmado,user_oid from pedido " +
			"where oid=(select max(oid) from pedido)";
	private static final String DELETE_STATEMENT =
			"DELETE FROM pedido WHERE oid=? ;" ;
	
	public Pedido crearPedido(Pedido pedido){
		try {
			getConexion();
			preparedStatement = conexion.prepareStatement(INSERT);
									
			Calendar calendario = GregorianCalendar.getInstance();
			java.util.Date fecha = calendario.getTime();
			SimpleDateFormat formatoDeFecha = new SimpleDateFormat("yyyy-MM-dd");
			preparedStatement.setString(1, formatoDeFecha.format(fecha));
			preparedStatement.setBoolean(2, false);
			preparedStatement.setInt(3, pedido.getUser_oid());
			preparedStatement.executeUpdate();
			pedido = leerUnPedido();
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return pedido;
	}

	public Pedido leerUnPedido(){
		Pedido pedido = new Pedido();
		try {
			getConexion();
			statement = conexion.createStatement();
			resultSet = statement.executeQuery(UNREGISTRO);
				
			if(resultSet.next()){
				
				pedido.setOid(resultSet.getInt("oid"));
				pedido.setFecha(resultSet.getString("fecha"));
				pedido.setConfirmado(resultSet.getBoolean("confirmado"));
				pedido.setUser_oid(resultSet.getInt("user_oid"));
				
			}
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return pedido;
	}
	
	public Collection<Pedido> getPedidos(String clausulaWhere){
		Collection<Pedido> lista = new ArrayList<Pedido>();
		try {
			getConexion();
			statement = conexion.createStatement();
			resultSet = statement.executeQuery
				("select oid,date_format(fecha,'%d-%m-%Y') as fecha, " +
				"confirmado,user_oid, total, base, gastosenvio from pedido " + clausulaWhere);
			while(resultSet.next()){
				Pedido pedido = new Pedido();
				pedido.setOid(resultSet.getInt("oid"));
				pedido.setFecha(resultSet.getString("fecha"));
				pedido.setConfirmado(resultSet.getBoolean("confirmado"));
				pedido.setUser_oid(resultSet.getInt("user_oid"));
				pedido.setTotal(resultSet.getFloat("total"));
				pedido.setBase(resultSet.getFloat("base"));
				pedido.setGastosEnvio(resultSet.getFloat("gastosenvio"));
				lista.add(pedido);
			}
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		//System.out.println("Coleccion en udao " + lista.isEmpty());
		return lista;
		
	}
	
	public boolean deletePedido (int oid){
		boolean exito = false;
		try {
			getConexion();
			preparedStatement = conexion.prepareStatement(DELETE_STATEMENT);
			preparedStatement.setInt(1, oid);
			int filasAfectadas = preparedStatement.executeUpdate();
			
			if (filasAfectadas == 1){
				exito = true;
			}
			
			} catch(SQLException ex){
				exito = false;
				ex.printStackTrace();
			} finally {
				cerrar();
			}
			return exito;
	}
	
}
